package san.java.arrays_04;

/**
 * 一维和二维数组的定义和初始化
 */

public class arrays {

    public static void main(String[] args) {
        /**
         * 1. 一维数组声明和定义
         * type var[] 或 type[] var
         */

        int [] a;
        int b[];

        /**
         * 1.1 一维数组初始化
         *  动态初始化  &  静态初始化
         */

        // 动态初始化
        int a1[] = new int[4];  // 声明一个能存放4个int数据的数组

        // 静态初始化
        int[] b1 = new int[]{1, 2, 3, 4};  // 声明了一个存放了1234的数组

        /**
         * 2. 数组元素的引用
         *  使用下标获取
         */

        String[] strs = new String[]{"c", "a", "b"};
        /**
         * 3. 数组有一个 length 属性
         */
        System.out.println("strs的长度是: " + strs.length);

        /**
         * 4. 默认初始化
         *  使用动态初始化的时候,数组的元素会有默认值,
         *      数字类型的默认值是0
         *      对象的默认数值是null;
         */
        int[] a2 = new int[2];
        String[] str2 = new String[2];
        System.out.println(a2[0]);  // 0
        System.out.println(str2[0]);  // null

        /**
         * 二维数组
         *  二维数组的定义和初始化
         *      1. 静态初始化
         *      2. 动态初始化
         *          i 定义出两个维度
         *          ii 只定义第一个维度的长度,不定义第二个维度的长度,默认值为空数组 []
         *
         *
         */

        int[][] arr2 = new int[][]{
                {1,2},
                {3,4}
        };

        int[][] arr3 = new int[2][3];  // 定义出两个维度
        int[][] arr4 = new int[2][];  // 只定义第一个维度的长度,不定义第二个维度的长度

        int[] arr5, arr6[];  // 特殊写法, arr5是一维数组, arr6是二维数组

        int[][] arr7 = new int[][] {
                {3, 8, 2},
                {2, 7},
                {9, 0, 1, 6}
        };

        int len = arr7.length;

        int res = 0;
        for (int i = 0; i < len; i++)
            for (int j = 0; j < arr7[i].length;j++)
                res += arr7[i][j];
        System.out.println("res: " + res);
    }
}
